package dao

import (
	"micro.user.action.server/common"
	"micro.user.action.server/database"
	"micro.user.action.server/models"
	"micro.user.action.server/utils"
	"xorm.io/core"
)

func WxUserRegistry(user *models.VsWxUser) (uint64, error) {
	eg := database.GetDB()
	if eg == nil {
		return 0, common.DBNil
	}

	afterID, err := eg.Table(database.VsWxUserTable).Insert(user)
	if err != nil {
		return 0, err
	}
	if afterID < 1 {
		return 0, common.DBInsertErr
	}

	return user.WxUserId, nil
}

func QueryWxUserInfo(userID uint64) (*models.VsWxUser, error) {
	eg := database.GetDB()
	if eg == nil {
		return nil, common.DBNil
	}

	info := &models.VsWxUser{}
	has, err := eg.Table(database.VsWxUserTable).ID(core.PK{userID}).Get(info)
	if err != nil {
		return nil, err
	}
	if !has {
		return nil, common.WxUserIsNotExist
	}

	return info, nil
}

func UpdateWxUserInfo(user *models.VsWxUser) error {
	eg := database.GetDB()
	if eg == nil {
		return common.DBNil
	}

	// 先查询user是否存在
	info := &models.VsWxUser{}
	has, err := eg.Table(database.VsWxUserTable).ID(core.PK{user.WxUserId}).Get(info)
	if err != nil {
		return err
	}
	if !has {
		return common.WxUserIsNotExist
	}

	var userName, phone string
	userName, _ = utils.Encrypt(user.WxUserName)
	if user.Phone != "" {
		phone, _ = utils.Encrypt(user.Phone)
	}

	afterID, err := eg.Table(database.VsWxUserTable).ID(core.PK{user.WxUserId}).Update(&models.VsWxUser{
		WxUserName:   userName,
		WxAvatarIcon: user.WxAvatarIcon,
		Gender:       user.Gender,
		Phone:        phone,
	})
	if err != nil {
		return err
	}
	if afterID < 1 {
		return common.DBUpdateErr
	}

	return nil
}
